#ifndef _JUEGO_H_
#define _JUEGO_H_

#include "TagHandler.h"
#include "Jugador.h"
#include "Comando.h"
#include "PersonajePacman.h"
#include "PersonajeFantasma.h"
#include "Tag.h"
#include <SDL_thread.h>
#include "PersonajeBonus.h"
#include "IteradorLista.h"
#include "Utils.h"
#include "Punto.h"

typedef void (*SDL_CONTROLS_START_HANDLER_FUNC)();

class Juego {

protected:

	static int timer;
	static Punto* medio;
	static int random;
	static int bonusRestantes;
	
	// Hilo para parsear XML
	static int parsearXML(/*void* algo*/);
	// Hilo para calcular ptoMedio
	static int calcularPuntoMedio(void* algo);
	static int calcularPuntoMedioNuevo(void* algo);


	// Hilo para demorar el tick de jeugo
	static int Juego::esperaTick(void* algo);


	// Metodos que manejan ciertos eventos
	static int manejarPersonaje(Personaje* per);
	static int manejarPersonaje(Lista<PersonajeFantasma>* listaPer);
	static int actualizarPersonajes();
	static int manejarMovimiento(void* jug);
	static bool controlarBonusComidos(PersonajePacman* unPersonaje);
	static void controlarAparicionDeBonusEspeciales();
	static int manejarEventos(Jugador* jugador1, Jugador* jugador2);

	static Lista<PersonajeBonus>* crearBonus();

	static bool xmlParsed;

public :
	static Lista<SDL_Thread>* listaThreads;
	static SDL_CONTROLS_START_HANDLER_FUNC quitHandlerFunc ;

	static void pruebaPablo();
	static void jugar(void* algo);
	static void setQuitHandler(SDL_CONTROLS_START_HANDLER_FUNC quitHandlerFunc);

};

#endif